package com.toilet.easyvideofx.util;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;

/**
 * mybatis工具类
 */
public class MyBatisUtil {
    private static SqlSessionFactory factory = null;

    // 使用static静态代码块，随着类的加载而加载，只执行一次
    static {
        try {
            // 加载MyBatis的主配置文件
            InputStream inputStream = MyBatisUtil.class.getClassLoader().getResourceAsStream("mybatis-config.xml");
            // 通过构建器（SqlSessionFactoryBuilder）构建一个SqlSessionFactory工厂对象
            factory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (Exception e) {
            throw new ExceptionInInitializerError(e);
        }
    }

    /**
     * 所有调用后必须进行SqlSession.close关闭
     * 可以使用try()语法进行调用，这样就能自动关闭了
     * 例如
     * try (SqlSession sqlSession = MyBatisUtil.getSqlSession()) {
     * ...
     * } catch (Exception e) {
     * ...
     * }
     *
     * @return
     */
    public static SqlSession getSqlSession() {
        return factory.openSession();
    }

}
